
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.SwingConstants;
import javax.swing.JSeparator;
import java.awt.Font;
import java.util.GregorianCalendar;
/**
 * Fenêtre d'attribution d'un Emprunt
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */

public class VueSaisieEmprunt extends Vue {

	private static final long serialVersionUID = 1L;
	
	private Exemplaire target;
	private Message m;
	
	private JPanel contentPane;
	private JTextField textFieldIsbn;
	private JTextField textFieldNumLect;
	private JTextField textFieldTitre;
	private JTextField textFieldAuteur;
	private JComboBox comboBoxExemplaire;
	
	private JButton buttonRech;
	private JButton buttonAnnuler;
	private JButton buttonFermer;
	private JButton buttonEnregistrer;
	private JTextField textFieldDateDeb;
	private JTextField textFieldDateFin;
	
	
	/**
	 * Create the frame.
	 */
	public VueSaisieEmprunt(final Controleur controleur) {
		super(controleur);
		setTitle("Informations sur un ouvrage");
		setBounds(100, 100, 452, 515);
		contentPane = new JPanel();
		this.addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
			getControleur().fermerVue(VueSaisieEmprunt.this);
			}
		});
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Isbn");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(39, 35, 61, 15);
		contentPane.add(lblNewLabel);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(129, 33, 114, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		
		JLabel lblAuteur = new JLabel("Auteur");
		lblAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblAuteur.setBounds(39, 137, 61, 15);
		contentPane.add(lblAuteur);
		
		textFieldAuteur = new JTextField();
		textFieldAuteur.setColumns(10);
		textFieldAuteur.setBounds(129, 104, 214, 19);
		contentPane.add(textFieldAuteur);
		
		
		JLabel lblTitre = new JLabel("Titre");
		lblTitre.setHorizontalAlignment(SwingConstants.RIGHT);
		lblTitre.setBounds(39, 106, 61, 15);
		contentPane.add(lblTitre);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setColumns(10);
		textFieldTitre.setBounds(129, 135, 214, 19);
		contentPane.add(textFieldTitre);

		
		JSeparator separator = new JSeparator();
		separator.setBounds(112, 180, 250, 2);
		contentPane.add(separator);
		
		JLabel lblNumLect = new JLabel("Num Lecteur");
		lblNumLect.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNumLect.setBounds(10, 254, 90, 15);
		contentPane.add(lblNumLect);
		
		textFieldNumLect = new JTextField();
		textFieldNumLect.setColumns(10);
		textFieldNumLect.setBounds(129, 252, 61, 19);
		contentPane.add(textFieldNumLect);
		
		buttonRech = new JButton("Rechercher");
		buttonRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().rechOuvrage(textFieldIsbn.getText());
				}
		});
		buttonRech.setBounds(296, 30, 107, 25);
		contentPane.add(buttonRech);
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setEnabled(false);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieEmprunt.this);}
		});
		buttonFermer.setBounds(183, 398, 107, 25);
		contentPane.add(buttonFermer);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieEmprunt.this);}
		});
		buttonAnnuler.setBounds(296, 66, 107, 25);
		contentPane.add(buttonAnnuler);
		
		JLabel lblNewLabel_2 = new JLabel("Exemplaires");
		lblNewLabel_2.setFont(new Font("Dialog", Font.BOLD, 12));
		lblNewLabel_2.setBounds(22, 224, 78, 15);
		contentPane.add(lblNewLabel_2);
		
		comboBoxExemplaire = new JComboBox();
		comboBoxExemplaire.setBounds(129, 221, 226, 20);
		contentPane.add(comboBoxExemplaire);
		
		textFieldDateDeb = new JTextField();
		textFieldDateDeb.setBounds(129, 283, 114, 19);
		contentPane.add(textFieldDateDeb);
		textFieldDateDeb.setColumns(10);
		
		textFieldDateFin = new JTextField();
		textFieldDateFin.setColumns(10);
		textFieldDateFin.setBounds(129, 314, 114, 19);
		contentPane.add(textFieldDateFin);
		
		JLabel lblDateDebut = new JLabel("Date Emprunt");
		lblDateDebut.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDateDebut.setBounds(10, 285, 90, 15);
		contentPane.add(lblDateDebut);
		
		JLabel lblDateRetour = new JLabel("Date Retour");
		lblDateRetour.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDateRetour.setBounds(10, 316, 90, 15);
		contentPane.add(lblDateRetour);
		
		buttonEnregistrer = new JButton("Enregistrer");
		buttonEnregistrer.setEnabled(false);
		buttonEnregistrer.setBounds(183, 355, 107, 25);
		contentPane.add(buttonEnregistrer);
		
		GregorianCalendar g = new GregorianCalendar();
		textFieldDateDeb.setText(ESDate.write(g));
		g.add(GregorianCalendar.DATE, Controleur.DUREEEMPRUNT);
		textFieldDateFin.setText(ESDate.write(g));
		
		buttonEnregistrer.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				controleur.nouvEmprunt(textFieldNumLect.getText(),target, textFieldDateDeb.getText(), textFieldDateFin.getText());
			}
		});
		}
	
	/**
	 * alimentation des composants d'affichage en consultant directement l'ouvrage, puis configuration des listener des champs qui se déverouillent.
	 */
	public void alimente(final Ouvrage ouv) 
	{
		for(ActionListener a : comboBoxExemplaire.getActionListeners())
			comboBoxExemplaire.removeActionListener(a);
		comboBoxExemplaire.removeAllItems();
		textFieldTitre.setText(ouv.getTitre());
		textFieldAuteur.setText(ouv.getAuteur().toString());
		int nbEmpr = ouv.getNbExemplairesEmpruntable();
		if ((nbEmpr)== 0 )
		{
			Message dialog = new Message("Aucun exemplaire n'est empruntable.");
		}
		else
		{
			for (Exemplaire exemplaire : ouv.getExemplaires()) 
				{
					if (exemplaire.estEmpruntable())
						comboBoxExemplaire.addItem("Numéro " + String.valueOf(exemplaire.getNumero()));
				}
			
			comboBoxExemplaire.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e) {
					target = ouv.getExemplaire(Integer.parseInt(comboBoxExemplaire.getSelectedItem().toString().substring(7)));
					setEtat(inter2);
				}
			});
			textFieldNumLect.addCaretListener(new CaretListener()
			{
				@Override
				public void caretUpdate(CaretEvent e)
				{
					if(!textFieldNumLect.getText().isEmpty())
						setEtat(finale);
					else
						setEtat(inter2);
				}
				
			});
		}
	}
	/**
	 * définition des états de la fenêtre, cad des régions actives selon l'état
	 */
	public void setEtat (int etat){
		switch (etat) 
		{
			case initiale: {
				buttonRech.setEnabled(true);
				comboBoxExemplaire.setEnabled(false);
				comboBoxExemplaire.setEditable(false);
				buttonEnregistrer.setEnabled(false);
				textFieldDateFin.setEditable(false);
				textFieldDateDeb.setEditable(false);
				textFieldNumLect.setEditable(false);
				buttonFermer.setEnabled(false);
				buttonAnnuler.setEnabled(true);
				textFieldTitre.setEditable(false);
				textFieldAuteur.setEditable(false);
				textFieldTitre.setText("");
				textFieldAuteur.setText("");
				for(ActionListener a : comboBoxExemplaire.getActionListeners())
					comboBoxExemplaire.removeActionListener(a);
				comboBoxExemplaire.removeAllItems();
				break;
				}
			case inter1: {
				comboBoxExemplaire.setEnabled(true);
				buttonFermer.setEnabled(true);
				buttonAnnuler.setEnabled(false);
				buttonEnregistrer.setEnabled(false);
				break;
				}
			case inter2: {
				textFieldIsbn.setEditable(false);
				buttonRech.setEnabled(false);
				buttonAnnuler.setEnabled(false);
				buttonEnregistrer.setEnabled(false);
				buttonFermer.setEnabled(true);
				textFieldNumLect.setEditable(true);
				break;
				}
			case finale:{
				buttonEnregistrer.setEnabled(true);
				buttonFermer.setEnabled(true);
				buttonAnnuler.setEnabled(false);
				break;
				}
		}
	}
}
